#include "fxcc/imgui/Editor.h"
#include "fxcc/core/graph/common/Defines.h"

using namespace fxcc::graph::common;
using namespace fxcc::imgui;

template <>
bool Editor::Edit<Defines::Pair>(const std::string& label, Defines::Pair& inst)
{
    EditInst<std::string>("m_Key", inst.m_Key);
    EditInst<std::string>("m_Value", inst.m_Value);
    return false;
}


template <>
bool Editor::Edit<Defines>(const std::string& label, Defines& inst)
{
    ImGui::Text("%s", label.c_str());

    CheckBoxInst<bool>("m_HasSkinnedShader", inst.m_HasSkinnedShader);

    if (ImGui::BeginTable("Defines", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg))
    {
        ImGui::TableSetupColumn("Key");
        ImGui::TableSetupColumn("Value");

        ImGui::TableHeadersRow();

        for (int row = 0; row < inst.m_Values.size(); row++)
        {
            auto& pair = inst.m_Values[row];

            ImGui::TableNextRow();
            ImGui::TableSetColumnIndex(0);
            EditInst<std::string>("", pair.m_Key);
            ImGui::TableSetColumnIndex(1);
            EditInst<std::string>("", pair.m_Value);

        }
        
        ImGui::TableNextRow();
        ImGui::TableSetColumnIndex(0);
        if (ImGui::Button("+"))
        {
            inst.m_Values.push_back({});
        }

        ImGui::TableNextRow();



        ImGui::EndTable();
    }


    return false;
}
